/*
	File:				Enemy.h
	Course:		SGP 1208
	Author:		Kori Po
	Purpose:	Enemy object class
*/

#pragma once

#include "Ability.h"
#include "Entity.h"
#include "Item.h"
#include "AIState.h"

#include "../SGD Wrappers/CSGD_DirectInput.h"
#include "../SGD Wrappers/CSGD_XAudio2.h"
#include "../SGD Wrappers/CSGD_TextureManager.h"
#include "../SGD Wrappers/SGD_Math.h"

#include <vector> 

class CEnemy : public CEntity
{
private:
	// Class DM
	CItem*		m_pDrop;													
	CAbility*	m_pAbility;
	
	// Wrapper Pointers
	CSGD_DirectInput*					m_InputGuy;
	CSGD_TextureManager*		m_TextureGuy;
	CSGD_XAudio2*							m_AudioGuy;

	// Class Variables
	int				m_nHP;
	int				m_nDefense;
	int				m_nAtkPower;
	float			m_fAtkSpeed;
	int				m_nAP;
	float			m_fCDR;
	float			m_fMovement;
	
	// AI Machine
	std::vector<CAIState*>	m_pStateQueue;

public:
	CEnemy(void);
	virtual ~CEnemy(void);

	// Primary Running Functions
	void Update(float pElapsedTime);
	void Render(void);

	// Accessors
	int				GetHP					( void ) const	{	return m_nHP;					}
	int				GetDefense			( void ) const	{	return m_nDefense;		}
	int				GetAtkPower		( void ) const	{	return m_nAtkPower;	}
	float			GetAtkSpeed		( void ) const	{	return m_fAtkSpeed;	}
	float			GetCDR				( void ) const	{	return m_fCDR;				}
	float			GetMovement	( void ) const	{	return m_fMovement;	}

	// Mutator
	void			SetHP							( int					pHP						)		{	m_nHP					= pHP;					}
	void			SetDefense				( int					pDefense			)		{	m_nDefense		= pDefense;			}
	void			SetAtkPower			( int					pAtkPower		)		{	m_nAtkPower		= pAtkPower;		}
	void			SetAtkSpeed			( float				pAtkSpeed		)		{	m_fAtkSpeed		= pAtkSpeed;		}
	void			SetCDR						( float				pCDR					)		{	m_fCDR					= pCDR;				}
	void			SetMovement		( float				pMovement	)		{	m_fMovement	= pMovement;	}
};

